package com.eltsistemas.controller.ferias;

import java.text.ParseException;
import java.util.Calendar;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.eltsistemas.adapter.Calendario;
import com.eltsistemas.dao.GenericDao;
import com.eltsistemas.hibernate.HibernateUtil;
import com.eltsistemas.modelo.Ferias;
import com.eltsistemas.modelo.Funcionario;

@Controller
@RequestMapping("/ferias")
public class FeriasAltera {
	
	@RequestMapping(value="/alterado", method=RequestMethod.POST)
	public String cadastro(Ferias ferias, String dtAquisitivoInicial,String dtAquisitivoFinal, String dtRepousoInicial,
			   			   String dtRepousoFinal, String nomeFuncionario) throws ParseException
	{
		try
		{
			//Comparando as datas
			Calendario calendario = new Calendario();
			
			Calendar dataAquisitivoInicio = calendario.getData(dtAquisitivoInicial);
			Calendar dataAquisitivoFim = calendario.getData(dtAquisitivoFinal);
			
			Calendar dataRepousoInicio = calendario.getData(dtRepousoInicial);
			Calendar dataRepousoFim = calendario.getData(dtRepousoFinal);
	
			if(calendario.compare_Data(dataAquisitivoInicio, dataAquisitivoFim) == true && 
			   calendario.compare_Data(dataRepousoInicio, dataRepousoFim))
			{
				//Iniciando conexao a abrindo uma transacao
				Session session = new HibernateUtil().getSession();
				session.beginTransaction();
				
				GenericDao<Funcionario> daoFuncionario = new GenericDao<>(session, Funcionario.class);
				
				//Carrega o objeto
				Funcionario funcionario = daoFuncionario.findByName(nomeFuncionario);
				
				//Atualizando os dados do objeto
				ferias.setFuncionario(funcionario);
				ferias.setPeriodo_AquisitivoInicial(new Calendario().getData( dtAquisitivoInicial) );
				ferias.setPeriodo_AquisitivoFinal(new Calendario().getData( dtAquisitivoFinal) );
				ferias.setPeriodo_RepousoInicial(new Calendario().getData(dtRepousoInicial));
				ferias.setPeriodo_RepousoFinal(new Calendario().getData(dtRepousoFinal));
				
				
				GenericDao<Ferias> daoFerias = new GenericDao<>(session, Ferias.class);
				
				/*Salvando objeto no session, comitando os dados no banco e
				 * finalizando a conexao
				*/
				session = daoFerias.altera(ferias);	
				session.beginTransaction().commit();
				session.close();
			
				return "redirect:lista?nomeFuncionario="+nomeFuncionario;	
			}
			
			//Executa se a data final for menor que a data inicial
			return "redirect:lista?valor=data-final-maior-ferias&nomeFuncionario="+nomeFuncionario;	
			
		}
		catch(HibernateException e)
		{
			return "redirect:/painel/erro";
		}	
	}

}
